package com.qingke.bullfight;

import java.io.Serializable;
import java.util.Random;
/**
 * 玩家类
 * @author Administrator
 *
 */
public class Gamer extends Role implements Charge,Serializable{
	/**
	 * 
	 */
	private static final long serialVersionUID = 8726624106600912952L;
	private int chip=0;//筹码
	private int wager=0;//赌注
	private boolean isBet=false;//是否下注成功
	private boolean isBanker=false;//是否是庄家
	private Hand hand=new Hand();//手牌
	private int countHand=0;//计数第几张手牌
	/**
	 * 自动构造玩家，玩家的名字随机唯一，筹码随机
	 */
	public Gamer(){
		super();
		chargeChip();
	}
	/**
	 * 构造玩家，玩家的名字随机唯一，筹码指定
	 * @param chip
	 */
	public Gamer(int chip){
		super();
		chargeChip(chip);
	}
	/**
	 * 构造玩家，玩家的名字性别指定，筹码随机
	 * @param name
	 * @param gender
	 */
	public Gamer(String name,String gender){
		super(name,gender);
		chargeChip();
	}
	/**
	 * 构造玩家，玩家的名字性别指定筹码随机
	 * @param name
	 * @param gender
	 * @param chip
	 */
	public Gamer(String name,String gender,int chip){
		super(name,gender);
		chargeChip(chip);
	}
	/**
	 * 增加指定数量的筹码
	 * @param win
	 */
	public void increseChip(int win){
		chip+=win;
	}
	/**
	 * 减少指定数量的筹码
	 * @param lose
	 */
	public void reduceChip(int lose){
		chip-=lose;
	}
	/**
	 * 能否继续斗牛
	 * @return
	 */
	public boolean isContinued(){
		return chip>0;
	}
	/**
	 * 是否是庄家
	 * @return
	 */
	public boolean isBanker() {
		return isBanker;
	}
	/**
	 * 设定为庄家
	 * @param isBanker
	 */
	public void setBanker(boolean isBanker) {
		this.isBanker = isBanker;
	}
	/**
	 * 返回是否下注成功
	 * @return
	 */
	public boolean isBet() {
		return isBet;
	}
	/**
	 * 返回当前筹码数量
	 * @param win
	 */
	public int getChip() {
		return chip;
	}
	/**
	 * 随机充值2500到52500的筹码
	 * 
	 */
	public void chargeChip() {
		Random r = new Random();
		int amount=r.nextInt(50000)+2500;
		this.chip+=amount;
		System.out.println("["+this.getName()+"]成功充值"+amount+"，当前筹码"+this.chip);
	}
	/**
	 * 充值指定数量的筹码
	 */
	public void chargeChip(int chip) {
		this.chip+=chip;
		System.out.println("["+this.getName()+"]成功充值"+chip+"，当前筹码"+this.chip);
	}
	/**
	 * 打印玩家的信息
	 */
	public void print(){
		System.out.println("----------");
		System.out.println(getName()+"   "+getGender());
		if(isBanker)
			System.out.println("庄家    筹码："+chip);
		else
			System.out.println("闲家    筹码："+chip);
		System.out.println("----------");
	}
	/**
	 * 获得一张扑克牌，并加入到手牌中
	 * @param poker
	 */
	public void getPoker(Poker poker){
		if(countHand<5){
			hand.pokers[countHand]=poker;
			countHand++;
		}
		else{
			System.out.println("已经5张牌了");
		}
	}
	/**
	 * 返回手牌
	 * @return
	 */
	public Hand getHand() {
		return hand;
	}
	/**
	 * 翻牌，显示牌，并显示是否有牛、牛几、最大牌多少
	 */
	public void look(){
		try {
			Thread.sleep(1000);
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
		System.out.println(hand.toString());
		
	}
	/**
	 * 翻牌，只显示牌，并不显示是否有牛、牛几、最大牌多少
	 */
	public void flop(){
		System.out.println(hand.show());
		
	}
	/**
	 * 下注指定的筹码
	 * @param wager
	 */
	public void bet(int wager){
		if(wager<0){
			System.out.println("请输入正确的筹码数");
			isBet=false;
		}
		else if(wager==0){
			System.out.println("必须下注");
			isBet=false;
		}
		else if(wager<=this.chip){
			this.chip-=wager;
			this.wager=wager;
			try {
				Thread.sleep(300);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
			System.out.println("["+getName()+"]下注"+wager);
			isBet=true;
		}
		else{
			System.out.println("筹码不足，请重新下注");
			isBet=false;
		}
	}
	/**
	 * 返回赌注
	 * @return
	 */
	public int getWager() {
		return wager;
	}
	/**
	 * 结束一轮后恢复状态
	 */
	public void end(){
		isBanker=false;
		countHand=0;
		wager=0;
		isBet=false;
		for(int i=0;i<hand.pokers.length;i++)
			hand.pokers[i]=null;
	}
}
